<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        li {
            list-style: none;
        }

        .list {
            padding: 20px 0;
            border: 1px dashed #333;
        }

        .list li {
            line-height: 45px;
            border: 1px solid #333;
            margin-top: 10px;
            background-color: pink;
        }

        .list p,
        .list span {
            display: block;
            line-height: 45px;
            border: 1px solid #333;
            margin-top: 10px;
            background-color: #6ff;
        }
    </style>
</head>

<body>
    <button id="add">新增</button>
    <div class="list">
        <span>我是span标签</span>
        <li id="one">01</li>
        <li class="second">02</li>
        <li>03</li>
        <li>04</li>
        <li>05</li>
        <li class="a last">06</li>
        <p>我是p标签</p>
    </div>
</body>
<script>
    // 利用事件冒泡的原理,把子元素的事件 委托给父元素 由父元素代为执行

    // 事件委托实现步骤:
    // 1. 给父代元素绑定事件,通过事件源 确定触发事件的元素
    // 2. 区分触发事件的元素
    //    (1) 如果元素类型不同  => tagName
    //    (2) 如果元素类型相同, 就通过元素的属性来区分 => id class title 

    // 父元素通过事件源 对元素分门别类 => 统一执行


    // 优点:
    // 节省内存
    // 代码结构更加清晰,提高了代码执行效率
    // 可以给未来生成的元素绑定事件  (页面加载时没有,后来又动态生成的元素)

    var list = document.getElementsByClassName("list")[0];
    var liList = list.getElementsByTagName("li");
    var add = document.getElementById("add");

    add.onclick = function() {
        var li = document.createElement("li");
        li.textContent = "新增的li";
        list.appendChild(li);
    }

    list.onmouseenter = function (e) {
        var e = e || window.event;
        var target = e.target || e.srcElement;
        // console.log(target);

        if (target.tagName == "LI") {
            console.log("点击了li");
            // if (target.id == "one") {
            //     console.log("点击了第一个li");
            // } else if (target.className == "second") {
            //     console.log("点击了第二个li");
            // } else if (target.classList.contains("a")) {
            //     console.log("点击了最后一个li");
            // }

            // 1. 遍历集合 对比 => 下标
            // var index = -1;
            // for(var j=0;j<liList.length;j++){
            //     var item = liList[j];
            //     if(item === target){
            //         index = j;
            //         break;
            //     }
            // }
            // console.log(target.textContent,index);

            // 2. 伪数组转真数组
            var arr = Array.from(liList);
            var index = arr.indexOf(target);
            console.log(target,target.textContent,index);


        } else if (target.tagName == "P") {
            console.log("点击了p");
        } else if (target.tagName == "SPAN") {
            console.log("点击了span");
        }
    }

    
</script>

</html>